iT邦幫忙

DAY 16
0

Java Web的設計與應用系列 第 16

Day16 Vaadin 探討 MVP Unit test

  • 分享至 

  • xImage
  •  

準備技術:

  1. Vaadin
  2. Vaadin Login form component
  3. Unit Test Pattern

昨天實做一個Login的Navigator頁面切換,今天探討的是伴隨的測試機制。

  1. 下圖顯示昨天實做的類別圖,從MVP的模式可知道P控制了整個View的變化,也連接資料。

  2. 我們設立test資料夾,要來撰寫測試程式,採用的是JUnit,還要借用Mockito(參考資料4)。

  3. LoginView的測試程式,@Before和@Test是JUnit的測試Anonation,表示接下來要測試的程式,@Before可以當成準備,@Test是測試本體,在測試的原理中,要mock某程式達到完整測試,mock有點類似完全模仿,因為有些測試程式無法完全模仿出來預計結果。

    public class LoginViewImplTest {

      private LoginView view;
         private LoginViewHandler handler;
    
         @Before
         public void setUp() {
             view = new LoginViewImpl();
             handler = mock(LoginViewHandler.class);
             view.setHandler(handler);
             view.init();
         }
    
         @Test
         public void isTagAddedAfterButtonIsClicked() {
             view.getBtnLogin().click();
    
             verify(handler, times(1)).login();
         }
    

    }

  4. 接下來顯示P的測試,

    public class LoginPresenterTest {

     private LoginView view;
     private UserService service;
     private LoginPresenter presenter;
    
     @Before
     public void setUp() throws Exception {
         view = mock(LoginView.class);
    
         service = mock(UserService.class);
         presenter = new LoginPresenter(view, service);
     }
    
     @Test
     public void isLoginWorking() throws Exception {
         when(view.getTxtUsername()).thenReturn(new TextField("Jimmy"));
         when(view.getTxtPassword()).thenReturn(new TextField("Jimmy123"));
    
         presenter.login();
    
         Mockito.verify(service, times(1)).login(anyString(), anyString());
         Mockito.verify(view, times(1)).afterSuccessfulLogin();
     }
    

    }

  5. 測試的程式原理,請多看JUnit in Action,多寫測試多好處,知道程式跑什麼。

參考資料

  1. Vaadin 官網
  2. Vaadin書籍
  3. JUnit in Action
  4. Mockito

Day16 結束


上一篇
Day15 Vaadin 實做 Login 登入頁面
下一篇
Day17 Vaadin 探討Page UI
系列文
Java Web的設計與應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言